package com.woniuxy.sddfp.sms;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

/**
 * @author yellow Doctor
 * @date 2025-05-07
 * @desc 蜗牛创想：www.woniuxy.com
 */
@SpringBootApplication
public class SmsApplication {

    /**
     *    RedisTemplate 如何初始化后
     *    jdbc连接池如何初始化的
     * 1、 Springboot的自动装配
     *     1、@SpringBootApplication =是一个符合注解
     *           @SpringBootConfiguration    配置注解
     *              如果类上面标记这个注解 当前的类可以作为 java的配置类
     *           @ComponentScan              配置规则扫描注解
     *              扫描注解 (默认是 扫描Application这个类的 同级别的包 )
     *              可以自定义扫描规则
     *           @EnableAutoConfiguration    开启自动装配的开关
     *
     *  2、@EnableAutoConfiguration 这个注解干啥了 ?
     *        @Import(AutoConfigurationImportSelector.class)  把 AutoConfigurationImportSelector 添加到IOC容器中
     *        AutoConfigurationImportSelector 这个对象中 回去加载 一个配置文件 : spring.factories
     *           178行 这个方法 SpringFactoriesLoader.loadFactoryNames();   META-INF/spring.factories
     *
     * 3、META-INF/spring.factories 这个文件干啥
     *   1、在sporing-autoconfig 这个jar中
     *   2、加载很多的 自动装配的类
     *       RedisAutoConfiguration   加载redis的自动装配的类
     *       DataSourceAutoConfiguration  加载 连接池的 自动配置的类
     *
     * 2、Springboot中的模板方法
     *   1、DataSourceAutoConfiguration   读取yaml配置文件 初始化 模板类 添加到ioc容器中
     *      RedisAutoConfiguration        读取yaml配置文件 初始化 模板类 添加到ioc容器中
     *
     *   2、@EnableConfigurationProperties(DataSourceProperties.class) 加载
     *         DataSourceProperties配置类 ==> spring.datasource 读取jdbc的配置
     *      后续回初始化 jdbc的连接池对象 添加ioc容器中
     *    RedisProperties.class)  ===> 读取yaml的 redis配置  spring.redis
     *  @Bean
     * 	@ConditionalOnMissingBean(name = "redisTemplate")
     * 	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
     * 			throws UnknownHostException {
     * 		RedisTemplate<Object, Object> template = new RedisTemplate<>();
     * 		template.setConnectionFactory(redisConnectionFactory);
     * 		return template;
     * 	}
     * 	 这个代码就是 创建 RedisTemplate 对象添加到ioc容器中
     */
    RedisAutoConfiguration redisAutoConfiguration;
    DataSourceAutoConfiguration dataSourceAutoConfiguration;

    public static void main(String[] args) {

        SpringApplication.run(SmsApplication.class,args);

    }

}
